/**
 * 角色权限工具函数
 */

/**
 * 角色类型枚举
 */
export const RoleType = {
  GUEST: 'guest',
  USER: 'user',
  ADMIN: 'admin'
}

/**
 * 获取当前用户角色
 * @param {Object} store - Vuex store实例
 * @returns {string} 角色类型
 */
export function getCurrentRole(store) {
  if (!store) {
    return RoleType.GUEST
  }

  const isAuthenticated = store.getters?.isAuthenticated || false
  const isAdmin = store.getters?.isAdmin || false

  if (!isAuthenticated) {
    return RoleType.GUEST
  }

  if (isAdmin) {
    return RoleType.ADMIN
  }

  return RoleType.USER
}

/**
 * 获取角色的权限列表
 * @param {string} role - 角色类型
 * @returns {Array<string>} 权限列表
 */
export function getRolePermissions(role) {
  const permissions = {
    [RoleType.GUEST]: [
      // 景点管理
      'attractions.browse',           // 浏览景点列表
      'attractions.search',           // 搜索景点
      'attractions.filter',           // 筛选景点
      'attractions.view',             // 查看景点详情
      'attractions.viewImages',       // 查看景点图片
      'attractions.viewMap',          // 查看景点地图位置
      'attractions.viewRating',       // 查看评分（不能看详细评论）
      
      // 路线规划 - 游客只能查看分享的路线，不能规划
      'route.viewShare',              // 查看分享路线（通过分享码）
      
      // 社交互动
      'social.browse',                // 浏览动态列表
      'social.viewDetail',            // 查看动态详情
      
      // 用户管理
      'user.register',                // 注册账号
      'user.login',                   // 登录账号
      
      // 推荐系统
      'recommendation.hot',           // 查看热门景点推荐
      
      // 首页
      'home.browse'                   // 浏览首页
    ],
    
    [RoleType.USER]: [
      // 包含所有游客权限
      ...getRolePermissions(RoleType.GUEST),
      
      // 景点管理
      'attractions.review',           // 评价景点
      'attractions.favorite',         // 收藏景点
      'attractions.viewReviews',      // 查看详细评价
      
      // 路线规划
      'route.plan',                   // 规划路线
      'route.setBudget',              // 设置预算约束
      'route.selectAttractions',      // 选择必访景点
      'route.selectPriority',         // 选择优先级
      'route.viewResult',            // 查看规划结果
      'route.viewMap',                // 查看路线地图
      'route.save',                   // 保存路线
      'route.history',                // 查看路线历史
      'route.share',                  // 分享路线
      'route.unshare',                // 取消分享路线
      
      // 行程规划
      'itinerary.create',             // 创建行程
      'itinerary.edit',               // 编辑行程
      'itinerary.delete',             // 删除行程
      'itinerary.view',               // 查看行程详情
      
      // 社交互动
      'social.post',                  // 发布动态
      'social.comment',               // 评论动态
      'social.like',                  // 点赞动态
      'social.editOwn',               // 编辑自己的动态
      'social.deleteOwn',             // 删除自己的动态
      
      // 个人空间
      'profile.view',                 // 查看个人空间
      'profile.edit',                 // 编辑个人信息
      'profile.preferences',          // 设置偏好
      
      // 收藏管理
      'favorites.view',               // 查看收藏列表
      'favorites.manage',             // 管理收藏
      
      // 推荐系统
      'recommendation.personalized',  // 查看个性化推荐
      'recommendation.history'        // 查看基于历史的推荐
    ],
    
    [RoleType.ADMIN]: [
      // 包含所有普通用户权限
      ...getRolePermissions(RoleType.USER),
      
      // 景点管理
      'attractions.create',           // 添加景点
      'attractions.edit',             // 编辑景点
      'attractions.delete',           // 删除景点
      'attractions.batchImport',      // 批量导入景点
      'attractions.uploadImage',       // 上传景点图片
      'attractions.deleteImage',      // 删除景点图片
      'attractions.reviewModeration', // 审核景点评价
      
      // 用户管理
      'users.view',                   // 查看用户列表
      'users.manage',                 // 管理用户
      'users.permissions',            // 管理用户权限
      
      // 内容管理
      'content.moderate',             // 内容审核
      'content.delete',               // 删除内容
      
      // 系统管理
      'admin.dashboard',              // 访问管理员后台
      'admin.statistics',             // 查看系统统计
      'admin.settings',               // 系统设置
      
      // 推荐系统
      'recommendation.manage',        // 管理推荐算法
      'recommendation.weights'        // 设置推荐权重
    ]
  }
  
  return permissions[role] || []
}

/**
 * 检查用户是否有某个权限
 * @param {string} feature - 权限标识
 * @param {Object} store - Vuex store实例
 * @returns {boolean} 是否有权限
 */
export function hasPermission(feature, store) {
  const role = getCurrentRole(store)
  const permissions = getRolePermissions(role)
  
  return permissions.includes(feature)
}

/**
 * 获取角色显示名称
 * @param {string} role - 角色类型
 * @returns {string} 显示名称
 */
export function getRoleDisplayName(role) {
  const names = {
    [RoleType.GUEST]: '游客',
    [RoleType.USER]: '普通用户',
    [RoleType.ADMIN]: '管理员'
  }
  return names[role] || '未知'
}
